/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package rest;

import entity.Message;
import java.net.URI;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;

/**
 *
 * @author student
 */
@Path("messages")
@Stateless
public class MessageService{
    //bewerking GET
    //Post naar messages zal 
    @PersistenceContext(unitName = "MessagesPU")
    private EntityManager em;
    /**
     *
     * @return
     */
    //de onderstaande get zal er voor zorgen dat alle get zullen worden verwerkt hieronder
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public List<Message> getAllMessages( @QueryParam("start") @DefaultValue("0")  int start,@QueryParam("count") @DefaultValue("10")  int count){// heeft standaart http 200 
        TypedQuery <Message>q =em.createNamedQuery("Message.findAll",Message.class);
        q.setFirstResult(start);
        q.setMaxResults(count);
        return em.createNamedQuery("Message.findAll",Message.class).getResultList();
    }
    
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
   public  Response addMessage(Message m){
        if(m.getMessage() == null ||m.getMessage().trim().length() ==0){
            //throw new WebApplicationException(Response.Status.BAD_REQUEST);
            throw new WebApplicationException(Response.status(Status.BAD_REQUEST).
                                        entity("Een nieuw bericht moet id = 0 hebben en een niet lege tekst").build());
        }
        m.setId(0); 
        em.persist(m);
        return Response.status(Status.CREATED).location(URI.create("/"+m.getId())).build();
   }
    @GET
    @Path("{id}")
    @Produces(MediaType.APPLICATION_JSON)
    public Message getMessageById(@PathParam("id") int id){//deze zal er voor zorgen dat http://localhost:8080/Messages/resourses/messages/id
        Message m =em.find(Message.class, id);
        if(m == null){
            throw new WebApplicationException(Status.NOT_FOUND);
        }
        return m;
    }

    @PUT
    @Path("{id}")
    @Consumes(MediaType.APPLICATION_JSON)
    public void updateMessage(@PathParam("id") int id,Message m){
        Message old =  em.find(Message.class, id);
        if(old ==null){
            throw new WebApplicationException(Status.NOT_FOUND);
            //404
        }
        if( m.getMessage() == null ||m.getMessage().trim().length() ==0){
            throw new WebApplicationException(Response.status(Status.BAD_REQUEST).
                                        entity("Een nieuw bericht moet id = 0 hebben en een niet lege tekst").build());
        }
        m.setId(id);
        em.merge(m);
    }
    @DELETE
    @Path("{id}")
    public void removeMessage(@PathParam("id") int id,Message m){
        Message message =  em.find(Message.class, id);
        if(message ==null){
            throw new WebApplicationException(Status.NOT_FOUND);
        }
        em.remove(m);       
        //return Response.status(Status.OK).build();
    }
}
